﻿using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace Financial_Assistant
{
    /// <summary>
    /// Логика взаимодействия для AddingUsersWindow.xaml
    /// </summary>
    public partial class AddingUsersWindow : Window
    {
        private string _connectionString =
                @"Data Source = CHRISTINABEIM\SQLEXPRESS; Initial Catalog=Financial_Assistant; Trusted_Connection=True;"; //( ip-сервера, имя БД, разрешение соединения)

        public AddingUsersWindow()
        {
            InitializeComponent();
        }

        private void OkBut_Click(object sender, RoutedEventArgs e)
        {
            bool flag = true; // ФЛАГ разрешения добавления имени входа

            if (LoginBox.Text == String.Empty)
            {
                MessageBox.Show("Введите имя");
                flag = false;
            }
            else if ((PaswordBox.Password != String.Empty) && (PaswordBox.Password != PassBox.Password)) 
            {
                MessageBox.Show("Введенные пароли не совпадают");
                flag = false;
            }
            else if ((PassQuestions.Text != String.Empty) && (PassAnswer.Text == String.Empty))
            {
                MessageBox.Show("Ответ на вопрос не введен");
                flag = false;
            }
            else if ((PassQuestions.Text == String.Empty) && (PassAnswer.Text != String.Empty))
            {
                MessageBox.Show("Вопрос для ответа не задан");
                flag = false;
            }
            else if (PaswordBox.Password == String.Empty)
            {
                MessageBox.Show("Пароль не задан");
                flag = false;
            }
            else if (flag)
            {
                try
                {
                    //ПРОВЕРКА НА ВВОД УЖЕ СУЩЕСТВУЮЩЕГО ИМЕНИ
                    SqlConnection connection = new SqlConnection(_connectionString);
                    StringBuilder query = new StringBuilder();
                    query.Append("SELECT * FROM [Имена Входа] where Имя = '");
                    query.Append(LoginBox.Text + "'");

                    SqlCommand command = new SqlCommand(query.ToString(), connection);
                    connection.Open(); // открыть считывание
                    SqlDataReader reader = command.ExecuteReader();

                    string results = String.Empty;
                    while (reader.Read())
                    {
                        for (int j = 0; j < reader.FieldCount; j++)
                        {
                            results += reader[j].ToString();
                        }
                    }
                    connection.Close();
                    reader.Dispose();
                    command.Dispose();

                    if (results != String.Empty)
                    {
                        MessageBox.Show("Это имя уже зарегистрировано");
                        connection.Dispose();
                    }
                    else
                    {
                        //Все условия выполнены. Добавляем пользователя в базу
                        query.Clear();
                        query.Append("INSERT INTO [Имена Входа] (Имя, Пароль");
                        
                        if (PassQuestions.Text == "")
                        {
                            query.Append(") VALUES ('");
                            query.Append(LoginBox.Text);
                            query.Append("','");
                            query.Append(PaswordBox.Password);
                            query.Append("')");
                        }
                        else
                        {
                            query.Append(", [Контрольный вопрос], Ответ) VALUES ('");
                            query.Append(LoginBox.Text);
                            query.Append("','");
                            query.Append(PaswordBox.Password);
                            query.Append("','");
                            query.Append(PassQuestions.Text);
                            query.Append("','");
                            query.Append(PassAnswer.Text);
                            query.Append("')");
                        }
                        command = new SqlCommand(query.ToString(), connection);
                        connection.Open(); // открыть считывание

                        reader = command.ExecuteReader();
                        reader.Dispose();
                        command.Dispose();
                        

                        //Добавляем этому пользователю стандартные категории в список используемых
                        query.Clear();
                        query.Append("INSERT INTO [Используемые категории] ([ID пользователя], Вид,Наименование) SELECT ");
                        query.Append("(SELECT [ID пользователя] FROM [Имена входа] where [Имена входа].Имя = '");
                        query.Append(LoginBox.Text);
                        query.Append("'), Категории.Вид, Категории.Наименование FROM Категории");

                        command = new SqlCommand(query.ToString(), connection);
                        reader = command.ExecuteReader();
                        reader.Dispose();
                        command.Dispose();
                        connection.Dispose();
                        this.Close();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this, "Ошибка чтения из базы данных" + Environment.NewLine + ex.Message);
                }
            }
        }

        private void CancelBut_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void PaswordBox_PasswordChanged(object sender, RoutedEventArgs e) // не даст ввести повторно пароль, пока нет оригинального
        {
            if (PaswordBox.Password == String.Empty)
            {
                PassBox.Password = String.Empty;
                PassBox.IsEnabled = false;
            }
            else PassBox.IsEnabled = true;
        }
    }
}
